package com.hejing.enum枚举类.认识enum枚举类;

/**
 * ClassName: SeasonEnumTest
 * Package: com.hejing.enum枚举类
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-04-03 20:24
 * @Version: 1.0
 */
public class SeasonEnumTest {
    public static void main(String[] args) {
        // System.out.println(Season01.SPRING.getClass());   // class com.hejing.enum枚举类.认识enum枚举类.Season01
        // System.out.println(Season01.SPRING.getClass().getSuperclass());  // class java.lang.Enum
        // System.out.println(Season01.SPRING.getClass().getSuperclass().getSuperclass());  // class java.lang.Object

        // 测试方法:
        // 1、String toString(): 默认返回的是常量名(对象名)，可以重写该方法。
        System.out.println(Season01.SPRING.toString());  // Season01{seasonName='春天', seasonDesc='春暖花开'}

        // 2、String name(): 得到当前枚举常量的名称，建议优先使用toString()
        System.out.println(Season01.SPRING.name());  // SPRING

        // 3、static 枚举类[] values(): 把枚举类的所有对象取出来放在枚举类数组中。
        Season01[] values = Season01.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
        }

        // 4、static 枚举类 valueOf(String objName): 根据传进去的字符串objName找到对应的枚举常量。没找到会报错
        String objName = "WINTER";
        Season01 season01 = Season01.valueOf(objName);
        System.out.println(season01);

        // 5、int ordinal(): 返回当前枚举常量的次序号，默认从0开始。
        System.out.println(Season01.AUTUMN.ordinal());  // 2


        // 通过枚举类的对象调用重写接口中的方法:
        Season01.SUMMER.show();
    }

}


// 枚举类实现接口:
interface Info{
    void show();
}


// jdk5.0中使用关键字enum定义枚举类.
enum Season01 implements Info{

    // 1、必须在枚举类的开头声明多个对象，对象之间使用,隔开。
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "雪花飘飘");

    // 2、声明当前类的对象的实例变量:
    private final String seasonName;  // 季节的名称,不对外提供修改功能(final)
    private final String seasonDesc;  // 季节的描述，不对外提供修改功能(final)

    // 3、构造器私有:
    private Season01(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    // 3、提供实例变量的get方法

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }



    @Override
    public String toString() {
        return "Season01{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }

    @Override
    public void show() {
        System.out.println("这是一个季节enum");
    }
}













